package com.linzelin.controller;



import com.alibaba.fastjson.JSON;

import com.linzelin.po.SysUser;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Controller
public class PageController {

    @RequestMapping("/getTest")
    @ResponseBody
    public Object getTest(Model model) {
        model.addAttribute("msg","我是SB");
        return new SysUser(1,"lin","test",1,null);
    }

    @RequestMapping("/goIndex")
    public String goIndex(Model model) {
        /*//从后台获取认证后的用户名然后上传数据
        String name = SecurityContextHolder.getContext().getAuthentication().getName();
        session.setAttribute("username",name);
        //将保存的数据上传到前端*/
        return "redirect:index.jsp";
    }




    @RequestMapping("/gologin")
    public String goLogin() {
        return "login";
    }

   /* @RequestMapping("/login")
    public String login(String username, String password, Model model){
        return null;
    }*/

    @RequestMapping("/level1/{id}")
    public String goLevel1(@PathVariable int id) {
        return "level1/" + id;
    }


    @RequestMapping("/level2/{id}")
    public String goLevel2(@PathVariable int id) {
        return "level2/" + id;
    }

    //这个就是Spring的el表达式的注解
    @PreAuthorize("hasAnyRole('ROLE_PRODUCT')")
    @RequestMapping("/level3/{id}")
    public String goLevel3(@PathVariable int id) {
        return "level3/" + id;
    }

    @RequestMapping("/importExcel")
    public void importExcel(MultipartFile file) throws Exception {
        // file为上传的后台接收到的前端文件，文件名称可访问，内容为字节数据需要转成POI专属的Workbook对象进行内容数据获取
        Assert.notNull(file, "上传文件不能为空");

        // 将输入的file文件转成POI的Excel文件对象Workbook
        String fileName = file.getOriginalFilename(); // 获取文件名
        Workbook workbook = null;
        if (StringUtils.endsWithIgnoreCase(fileName, "XLS")) {
            try {
                workbook = new HSSFWorkbook(file.getInputStream()); // XLS类型，2003Excel版本
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else if (StringUtils.endsWithIgnoreCase(fileName, "XLSX")) {
            try {
                workbook = new XSSFWorkbook(file.getInputStream()); // XLSX类型，2007Excel版本
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("文件类型不符,不是Excel文件 ");
        }

        // 解析Workbook对象，获取上传Excel内容（实际中，上传Excel文件需要按照指定规范编写上传）
        // 得到一个Sheet工作表
        Sheet sheet = workbook.getSheetAt(0);
        System.out.println("sheet:"+JSON.toJSONString(sheet));
        // 获得Sheet工作表的数据总行数（第0行开始）
        int totalRowNum = sheet.getLastRowNum();
        System.out.println("总行数totalRowNum:"+totalRowNum);
        // 获取当前sheet的第一行
        Row row1 = sheet.getRow(0);
        System.out.println("row1:"+JSON.toJSONString(row1));
        // 获取当前sheet的第二行
        Row row2 = sheet.getRow(1);
        System.out.println("row2:"+JSON.toJSONString(row2));
        // 获取当前sheet的第二行总列数（第1列开始）
        int physicalNumberOfCells = row2.getPhysicalNumberOfCells();
        System.out.println("获得第二行的总列数physicalNumberOfCells:"+physicalNumberOfCells);
        // 获取第二行的第一个cell
        Cell cell = row2.getCell(0);
        System.out.println("第二行第一列cell:"+cell);
        // 获取cell的数据类型
        int cellType = cell.getCellType();
        System.out.println("cellType:"+JSON.toJSONString(cellType));
        // 获取cell的数据，需要根据类型选择调用以下的方法
        // cell类型为String，获取内容
        String stringCellValue = cell.getStringCellValue();
        System.out.println("stringCellValue:"+JSON.toJSONString(stringCellValue));
        // cell类型为数字，获取内容
//		double numericCellValue = cell.getNumericCellValue();
       // cell类型为布尔型，获取内容
//		boolean booleanCellValue = cell.getBooleanCellValue();
    }

}
